package org.example.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.util.UUID;

/**
 * @author 宋孟林
 * @description
 * @create: 2025/3/8 8:47
 */
@Service
@Slf4j
public class OrderService {
    private static final String KEY_PREFIX = "ord:";

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    /**
     *使用ThreadLocalRandom来生成一个1-1000的随机整数，可以简单的模拟订单生成，
     * 但是逻辑不对，因为如果执行次数多了,会覆盖之前已经创建的key
     * 我们可以更改为自增的keyid
     */
    public void addOrder(){
//        ThreadLocalRandom random = ThreadLocalRandom.current();
        redisTemplate.opsForValue().setIfAbsent("keyId", "1");
        //将自增的key作为keyId，来返回一个生成的唯一的key,这个操作依赖于redis中已经存在的keyId，如果没有这个键会在前面这段代码创建
        Long keyId = redisTemplate.opsForValue().increment("keyId");
        String key = KEY_PREFIX + keyId;
        String serialNo = UUID.randomUUID().toString();
        String value = "京东订单:" + serialNo;
        log.info("订单已经生成key: {}", key);
        redisTemplate.opsForValue().set(key, value);
    }

    public String getOrderById(Integer keyId){
        return redisTemplate.opsForValue().get(KEY_PREFIX + keyId);
    }
}
